Elmah 是我最一開始使用的 Log 工具,基本上它的功能就是將應用程式所有發生的錯誤記錄下來,不需要改變程式架構,而且又有介面可以觀看,十分的方便;它從 WebForm 時代就有了,到了 MVC 也是運作的很好,那這邊就來介紹一下 Elmah 要如何在 ASP.NET Core 中使用 (.NET Core 也可使用)。
不過很可惜的,目前並沒有釋出官方的 Elmah for .NET Core,不過有一個新專案: ElmahCore By @barestan,到目前為止最後更新時間是 2017–12–08,希望還會繼續維護。
有一網友 Fork 了專案持續維護:https://github.com/funky81/ElmahCore ,推薦可以使用此版
因為 Nuget 原作者已經沒有再更新了,所以推薦使用 https://github.com/funky81/ElmahCore 自己 Build 一版出來
Package Explorer: Install-Package ElmahCore
DotNet CLI: dotnet add package ElmahCore
安裝完畢後,於 Startup.cs
分別於 ConfigureServices
中加入 service.AddElmah();
與 Configure
中加入 app.UseElamh();
public class Startup
{
...
public void ConfigureServices(IServiceCollection services)
{
...
services.AddElmah();
...
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
...
app.UseElmah();
...
}
}
這樣就設定完成了,夠簡單吧
接下來我們就來直接測試一下,在 HomeController
中的 Index
裡,故意產生 Exception
public class HomeController : Controller
{
public IActionResult Index()
{
throw new Exception($"{DateTime.Now} Generate Test Exception");
return View();
}
}
執行後,並故意瀏覽錯誤頁面,就已經開始記錄例外了
預設的查看的介面網址為:https://{url}:{port}/elmah
介面介紹
Deatails
可以看更多,甚至還有 Call Stack 以及相關變數,完全可以知道到底是哪個 Function 產生了例外確保 Elmah 頁面安全
在上面的範例中,Elmah 是可以公開被存取的,這肯定不合資訊安全,所以 Elmah 有提供了一點點的資訊安全
修改 Elmah 介面路徑
只需要在 Startup.cs
之 ConfigureServices
加入 service.AddElmah();
時,加入相關設定即可完成
public class Startup
{
...
public void ConfigureServices(IServiceCollection services)
{
...
services.AddElmah<XmlFileErrorLog>(options =>
{
options.LogPath = "~/logs";
});
...
}
...
}
不過很可惜的,現在看起來還沒登入驗證的支援,如果有興趣的或許可以去貢獻看看,或者是我沒發現?
下一篇來介紹把 Log 放到不同的儲存體上,以及如何過濾 Log